home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / sprite.txt < prev    next >
Text File  |  1993-01-06  |  17KB  |  301 lines

  1. A Brief Retrospective on the Sprite Network Operating System
  2. ------------------------------------------------------------
  3.  
  4. John Ousterhout
  5. Computer Science Division
  6. Department of EECS
  7. University of California at Berkeley
  8.  
  9. Sprite is a research operating system whose development I have had the
  10. pleasure of leading over the last eight years.  Four graduate students
  11. and I started the project in the Fall of 1984 because we felt that
  12. current operating systems were paying insufficient attention to local-area
  13. networks.  It seemed to us that networking support had been added in a
  14. quick and dirty fashion to systems that were designed to run stand-alone.
  15. As a result, networked workstations didn't work well together.  At the
  16. time we started Sprite there were no good network file systems (even NFS
  17. didn't exist yet) and administering a network of workstations was a
  18. nightmare.
  19.  
  20. Our goal for Sprite was to "do networking right" by building a new operating
  21. system kernel from scratch and designing the network support into the system
  22. from the start.  We hoped to create a system where a collection of
  23. networked workstations would behave like a single system with both storage
  24. and processing power shared uniformly among the workstations.  We hoped
  25. that users would be able to tap the power of the entire network while
  26. preserving the simple behavior and administrative ease of a traditional
  27. time-shared system.
  28.  
  29. I think that we achieved these goals.  Four technical accomplishments
  30. stand out in my mind.  First and foremost is Sprite's network file system,
  31. which demonstrated that network file systems can provide a convenient
  32. user model without sacrificing performance.  Sprite's file system allows
  33. file sharing while completely hiding the network.  It provides the same
  34. behavior among workstations that users would see if they all ran on a
  35. traditional time-sharing system.  Even I/O devices can be accessed
  36. unformly across the network, and user processes can extend the file
  37. system by implementing its I/O and naming protocols using pseudo devices
  38. and pseudo file systems.  At the same time, Sprite uses aggressive file
  39. caching to achieve high performance.  Five years after its construction,
  40. Sprite still has the fastest network file system in existence.
  41.  
  42. Sprite's second key accomplishment is its process migration mechanism,
  43. which allows processes to be moved transparently between workstations
  44. at any time.  With process migration a single user can harness the power
  45. of many workstations simultaneously, achieving speedups of four or more
  46. on common system tasks such as recompilation.  The migration mechanism
  47. keeps track of idle machines, uses them for migration, and evicts
  48. migrated processes when a workstation's owner returns, so that migration
  49. doesn't impact the response time of active users.  Evicted processes are
  50. remigrated to a different idle machine or executed on their home machine.
  51. Sprite is one of only a few systems where process migration has been
  52. used on a day-to-day basis by a large user community.
  53.  
  54. Sprite's third key accomplishment is its single system image.  The file
  55. system and process migration provide the most obvious evidence of the
  56. single system image, since they make storage and processing power sharable
  57. among workstations.  But in many other ways Sprite looks and feels just like
  58. a single system.  There is one root partition, one password file, one swap
  59. area (in the network file system), one login database, and so on.  The
  60. "finger" command tells about all users on all workstations in the Sprite
  61. cluster, not just those on the workstation where the command was invoked.
  62. System administration is no harder with fifty machines in the network than
  63. it is with ten, and adding a new machine is no more difficult than adding
  64. a new user account.
  65.  
  66. Sprite's single system image also supports different machine architectures
  67. in the same cluster.  We developed a framework for separating architecture-
  68. independent information from architecture-specific information.  All the
  69. information for all architectures is visible at all times, which simplifies
  70. cross-development, yet each machine uses the appropriate architecture-
  71. dependent information when it is needed.
  72.  
  73. Sprite's fourth key accomplishment is its log-structured file system (LFS),
  74. which demonstrates a radical new approach to file system design.  LFS
  75. treats the disk more like a tape, writing information sequentially in large
  76. runs that permit great efficiency.  We developed a new garbage collection
  77. mechanism that continually opens up large extents of free space on the
  78. disk.  The result is a system that writes small files to disk an order of
  79. magnitude faster than any other existing file system.  At the same time
  80. it handles other operations, such as reads and large writes, at least
  81. as well as other systems.  Log-structured file systems have many other
  82. advantages as well, such as fast crash recovery, the ability to store
  83. information on disk in compressed form, and the ability to vary the block
  84. size from file to file.
  85.  
  86. In addition to the above results, which have already been achieved, there
  87. are several promising projects still underway, such as recovery enhancements,
  88. a new file system called Zebra that stripes files across multiple servers,
  89. and high-bandwidth file service using disk arrays.  Before the Sprite project
  90. ends I expect to see major results from each of these projects too.
  91.  
  92. Throughout the Sprite project we have tried to characterize the behavior
  93. of the system and to use this information to guide future developments.
  94. Some of our most important results are the measurements we have made.  The
  95. founding of the project was based in part on file system measurements made
  96. on time-shared systems in 1984 and 1985.  We made additional measurements
  97. of Sprite usage in 1991 to see how patterns had changed and to analyze
  98. the potential application of non-volatile memory in networked systems.
  99.  
  100. Perhaps the most significant accomplishment of all is that we were able
  101. to make the system work, not just for ourselves but for a community of
  102. users that numbered as high as 80 or more at the peak of the project.
  103. Many of these users depended on Sprite for all of their day-to-day
  104. computing needs, such as mail and printing.  For a period of several
  105. years it was common to see 25-35 simultaneous logins of which only a
  106. half-dozen were Sprite developers.  I know of only one other university
  107. project that developed a new operating system kernel from scratch and
  108. used it to support a user community this large for this long;  that project
  109. was Multics, which was carried out at MIT in the late 1960's.
  110.  
  111. Furthermore,  we built Sprite (more than 200,000 lines of new code in all)
  112. with a small team that averaged only about four graduate students and one
  113. or two staff or undergraduate assistants.  We never got too large to have
  114. project meetings in my office, although there were times when we had to
  115. borrow two additional chairs to supplement the six already in my office.
  116.  
  117. The history of Sprite divides into roughly three phases:  initial
  118. development, consolidation and LFS development, and new ventures
  119. and closeout.
  120.  
  121. The first phase of Sprite, initial development, lasted from the founding
  122. of the project in the fall of 1984  until about the end of 1987.  We began
  123. coding on Sun-2 workstations in early 1985 and had a system that could
  124. execute shell commands by the spring of 1986.  In the summer of 1986 we
  125. started developing the "real" Sprite file system (we'd used an older
  126. network file system called BNFS up until that point).  About that time
  127. we also started on process migration and porting the X window system.
  128. By the fall of 1987 all of these things were working, along with an
  129. internet protocol sever.  We had also ported Sprite to Sun-3's.  At this
  130. point we copied the kernel sources over to Sprite and began doing all of
  131. our kernel development on Sprite itself.
  132.  
  133. The second phase in Sprite's history lasted from late 1987 to late 1990.
  134. This phase consisted mostly of consolidation.  In early 1988 we made a
  135. major revision of the file system.  Remote device support was improved,
  136. the pseudo device implementation was rewritten, and a simple recovery
  137. protocol was introduced so the system could recover gracefully from
  138. server crashes.  Process migration underwent major improvements also,
  139. and by late 1988 it became stable enough for us to use it daily in system
  140. development.  In 1988 we ported Sprite to the SPUR research multiprocessor
  141. (the SPUR project provided much of the early funding for Sprite), and
  142. in 1989 we ported it to DECstation-3100 and Sun-4 platforms.  A port to
  143. the Sequent Symmetry machine was carred out at Sequent in late 1989 and
  144. early 1990.
  145.  
  146. In late 1988 we began to support users other than Sprite developers. The
  147. user community gradually grew in size, peaking at around 80 in 1990 and
  148. 1991.  We also prepared a distribution tape so that we could make Sprite
  149. available to people outside Berkeley.  The first tapes were sent out in
  150. late 1989; over the life of the project Sprite has run at about ten
  151. different sites.
  152.  
  153. The most significant new development during Sprite's second phase was
  154. the LFS implementation.  We made preliminary designs and studies in 1988
  155. but didn't solidify the prototype design until 1989 (as part of the
  156. newly started RAID project).  Coding started in late 1989.  By the spring of
  157. 1990 LFS was showing signs of life, and it entered production use in the
  158. fall of 1990.  By late 1991 virtually all of Sprite's dozen disks were
  159. using LFS.
  160.  
  161. The final phase of the project started in late 1990 and will continue
  162. until Sprite shuts down in late 1993 or early 1994.  In this phase we
  163. initiated several new projects, most of which reflected the increasing
  164. focus of the project on issues related to storage management.  In the
  165. winter of 1990 we began to analyze the behavior of recovery after file
  166. server crashes;  this led to a series of experiments with better recovery
  167. techniques, such as server-driven recovery and the use of non-volatile
  168. storage.  In 1991 we began a project to see if Sprite could be
  169. re-implemented as a user-level server process running under the Mach 3.0
  170. kernel;  this project completed in the summer of 1992 with substantial
  171. functionality but disappointing performance.  In 1991 and 1992 we also
  172. developed the Jaquith tape library system, which made robotically-controlled
  173. tape systems available for both Sprite and other UNIX systems.  During the
  174. same period we started projects to experiment with striping files across
  175. multiple file servers (Zebra) and to improve the bandwidth of remote
  176. accesses to disk arrays.  Both of these projects are still underway.
  177.  
  178. Like most software, the Sprite kernel became harder and harder to maintain
  179. as it aged.  Frequent revisions and changes in project personnel led to
  180. increases in system complexity, in spite of our best efforts to keep
  181. things clean and simple. In addition, we found it harder and harder to
  182. keep up with developments in commercial operating systems.  By 1990
  183. there were several commercial versions of UNIX with massive support teams,
  184. such as System V, Solaris, and OSF.  These systems were adding features
  185. at a rapid pace and our users wanted access to these features under
  186. Sprite.  We added new features such as shared libraries and binary
  187. compatibility with SunOS and Ultrix, but we found ourselves spending
  188. more and more time on tasks that were not research oriented.
  189.  
  190. At the end of 1991 we decided to bring the Sprite project to a gradual
  191. close.  Since then we have not started any major new developments and
  192. no new graduate students have joined the project.  We plan to complete
  193. the projects that are currently underway and then shut down the system
  194. in late 1993 or early 1994.  We no longer encourage new users to work on
  195. Sprite, and our user community is slowly shrinking back to just the Sprite
  196. team.  Sprite has served us long and well as a research vehicle; now it is
  197. time to move on to other things.
  198.  
  199. Many people have contributed to Sprite over the years.  I can't possibly
  200. hope to list every significant contribution, but I'll try anyway.  The
  201. list below summarizes the work of the principal project members (my
  202. research students and the staff who reported directly to me).  The people
  203. are listed in chronological order by the date when they started working
  204. on Sprite-related things, and the projects are listed with the most
  205. important ones (in my opinion) first.
  206.  
  207. Brent Welch (Summer 1984 - Spring 1990):
  208.     Remote procedure calls; file system (storage manager, file system
  209.     switches, prefixes, name lookup, remote devices, crash recovery
  210.     protocol, disk formatting, dump and restore, migration support);
  211.     pseudo devices; pseudo file systems; BNFS file system; NFS support;
  212.     device drivers; kernel profiling; bootstrapping.
  213.  
  214. Andrew Cherenson (Fall 1984 - Fall 1987):
  215.     Internet protocol sever; window system design and X10 porting;
  216.     timer; serial interfaces; user-level debugging;  pseudo-devices;
  217.     init process; command porting (network commands, login); process-related
  218.     system calls; UNIX compatibility; manual entry formatting; C library.
  219.  
  220. Fred Douglis (Fall 1984 - Fall 1990):
  221.     Process migration and the pmake program; UNIX compatibility and
  222.     command porting; system call interfaces; synchronization, scheduling,
  223.     and process support; porting and support for major programs such
  224.     as emacs and tex; trap handling and UART support for SPUR; early
  225.     design work for log-structured file systems; experiments with
  226.     optical disks.
  227.  
  228. Mike Nelson (Fall 1984 - Fall 1988):
  229.     Virtual memory; file system (caching, disk checker, vm interactions,
  230.     migration support, crash recovery, select); kernel debugging;
  231.     Sun-3 and DECstation-3100 ports; device and network drivers;
  232.     signal handling;  SPUR port (virtual memory, trap handlers, etc.);
  233.     command porting.
  234.  
  235. John Ousterhout (Fall 1984 - ??):
  236.     Memory allocation; C library; terminal driver; context switching;
  237.     gcc porting, mkmf program.
  238.  
  239. Adam de Boor (Fall 1986 - Summer 1988):
  240.     Pmake program; X11 porting (e.g. device drivers and region code);
  241.     xman and mkmf programs; swat debugger.
  242.  
  243. Mendel Rosenblum (Winter 1988 - Fall 1992):
  244.     Log-structured file system; SPUR port; debugging tools; disk drivers;
  245.     Sun-4 port; X11R4 porting.
  246.  
  247. Mary Baker (Winter 1988 - ??):
  248.     Recovery analysis and redesign; congestion control for remote procedure
  249.     calls; recovery box; Sun-4, SPARCstation, SPARCstation-2 ports; file
  250.     system measurements; analysis of NVRAM uses; RPC byte-swapping; SCSI
  251.     device driver; multi-processor conversion.
  252.  
  253. Bob Bruce (Fall 1988 - Fall 1990, Fall 1991 - Winter 1992):
  254.     Spooler daemons; dump and restore utilities; Sprite distribution tape;
  255.     support for compilation and debugging tools; user-level profiling;
  256.     floating-point support; DECstation-3100 and Sequent ports; UNIX
  257.     compatibility; Operation Desert Storm support; X11R5 port.
  258.  
  259. John Hartman (Fall 1988 - ??):
  260.     Zebra striped file system; file system measurements; port to SPUR
  261.     multiprocessor; measurements of Sprite running on SPUR multiprocessor;
  262.     device and network drivers (FDDI and Ultranet); synchronization
  263.     analysis; disk checker, dumps, and other disk utilities; multiprocessor
  264.     support;  bootstrapping; debugger support; LFS support; scheduler.
  265.  
  266. Don Reeves (Spring 1989):
  267.     ARP and reverse ARP.
  268.  
  269. Ken Shirriff (Summer 1989 - ??):
  270.     High-speed file transfer using RAID; file system traces; analysis
  271.     of name caching; shared virtual memory; mapped files; System-V
  272.     synchronization; security enforcement; mail support; UNIX
  273.     compatibility; dynamic linking; network daemons; DECstation-3100
  274.     command porting; dump/restore utilities.
  275.  
  276. Mike Kupfer (Summer 1990 - Summer 1992):
  277.     Sprite as Mach server process; measurements for Sprite analysis paper;
  278.     internal error checks in kernel; support for pmake, X, dump/restore
  279.     utilities, and other administrative tools.
  280.  
  281. Jim Mott-Smith (Winter 1991 - Fall 1992):
  282.     Jaquith tape archive system; SCSI drivers; NFS support; internet
  283.     protocol server support; dump/restore utilities; sendmail support.
  284.  
  285. Geoff Voelker (Fall 1991 - Summer 1992):
  286.     Disk utilities; FDDI network driver; network utilities.
  287.  
  288. Matt Secor (Summer 1992):
  289.     Debugger support.
  290.  
  291. In addition to the people listed above, there were many others who made
  292. significant contributions to Sprite even though they didn't report
  293. directly to me.  Here are a few of the "outside helpers";  apologies to
  294. anyone that I've overlooked.
  295.  
  296. Bob Beck (Sequent port), Ann Chervenak (device drivers), Doug Johnson
  297. (SPUR debugging), Ed Lee (RAID striping driver), Dean Long (kernel bug
  298. fixing, bootstrapping, SPARCstation port), Ethan Miller (RAID controller
  299. support) , Srinivasan Seshan (Ultranet support), Thorsten Von Eicken
  300. (X11R4 port), Jay Vosburgh (Sequent port).
  301.